import request from '@/utils/request';

const ROLE_BASE_URL = '/admin/role';

const RoleAPI = {
  /** 添加角色 */
  create(data: RoleForm) {
    return request({
      url: `${ROLE_BASE_URL}`,
      method: 'post',
      data: data,
    });
  },

  /**
   * 更新角色
   *
   * @param data 角色表单数据
   */
  update(data: RoleForm) {
    return request({
      url: `${ROLE_BASE_URL}/update`,
      method: 'post',
      data: data,
    });
  },

  /**
   * 批量删除角色，多个以英文逗号(,)分割
   *
   * @param ids 角色ID字符数组
   */
  deleteByIds(ids: string[]) {
    return request({
      url: `${ROLE_BASE_URL}/delete`,
      method: 'post',
      data: ids,
    });
  },

  /**
   * 更新角色菜单
   *
   * @param data {"roleId": 0, "menuIds": ""}
   */
  updateRoleMenus(data: any) {
    return request({
      url: `${ROLE_BASE_URL}/menu`,
      method: 'post',
      data: data,
    });
  },

  /** 分页查询角色信息 */
  getPage(queryParams?: RolePageQuery) {
    return request<any, PageResult<RolePageVO[]>>({
      url: `${ROLE_BASE_URL}/page`,
      method: 'get',
      params: queryParams,
    });
  },

  /** 获取角色下拉数据源 */
  getOptions() {
    return request<any, OptionType[]>({
      url: `${ROLE_BASE_URL}/list`,
      method: 'get',
    });
  },

  /** 通过角色ID查询角色列表 */
  getRoleListById(data: any) {
    return request<any, OptionType[]>({
      url: `${ROLE_BASE_URL}/getRoleList`,
      method: 'post',
      data,
    });
  },

  /**
   * 条件查询角色信息
   *
   * @param id 角色ID
   * @returns 角色表单数据
   */
  getRoleData(params: any) {
    return request<any, RoleForm>({
      url: `${ROLE_BASE_URL}/details`,
      method: 'get',
      params: params,
    });
  },

  /**
   * 通过ID查询角色信息
   *
   * @param id 角色ID
   * @returns 角色表单数据
   */
  getFormData(id: number) {
    return request<any, RoleForm>({
      url: `${ROLE_BASE_URL}/details/${id}`,
      method: 'get',
    });
  },

  /**
   * 获取角色菜单
   * @param id
   * @returns
   */
  getRoleMenuIds(roleId: string) {
    return request<any, RoleForm>({
      url: `/admin/menu/tree/${roleId}`,
      method: 'get',
    });
  },

  /**
   * 导出角色
   *
   * @param queryParams 查询参数
   */
  export(queryParams: any) {
    return request({
      url: `${ROLE_BASE_URL}/export`,
      method: 'get',
      params: queryParams,
      responseType: 'blob',
    });
  },

  /**
   * 导入角色
   *
   * @param file 导入文件
   */
  import(file: File) {
    const formData = new FormData();
    formData.append('file', file);
    return request<any, ExcelResult>({
      url: `${ROLE_BASE_URL}/import`,
      method: 'post',
      data: formData,
      headers: {
        'Content-Type': 'multipart/form-data',
      },
    });
  },
};

export default RoleAPI;

/** 角色分页查询参数 */
export interface RolePageQuery extends PageQuery {
  /** 搜索关键字 */
  keywords?: string;
  /** 角色编码 */
  roleCode?: string;
  /** 角色名称 */
  roleName?: string;
}

/** 角色分页对象 */
export interface RolePageVO {
  /** 角色编码 */
  roleCode?: string;
  /** 角色ID */
  roleId?: string;
  /** 角色名称 */
  roleName?: string;
  /** 角色描述 */
  roleDesc?: string;
  /** 排序 */
  sort?: number;
  /** 角色状态 */
  status?: number;
  /** 创建时间 */
  createTime?: Date;
  /** 修改时间 */
  updateTime?: Date;
}

/** 角色表单对象 */
export interface RoleForm {
  /** 角色ID */
  roleId?: string;
  /** 角色编码 */
  roleCode?: string;
  /** 数据权限 */
  dataScope?: number;
  /** 角色名称 */
  roleName?: string;
  /** 角色描述 */
  roleDesc?: string;
  /** 排序 */
  sort?: number;
  /** 角色状态(1-正常；0-停用) */
  status?: number;
}
